package br.edu.unoesc.minibi.analisador;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class NumberFormat {

	/**
	 * arredonda um numero de ponto flutuante para somente duas casas após a
	 * virgula. se fração restante for >= 0.5 arredonda pra 1, senão arredonda
	 * pra 0.
	 * 
	 * @param numeroArredondar
	 * @return float com duas casas após a virgula
	 * @see RoundingMode#HALF_UP
	 */
	public static Long arredondaLong(Float numeroArredondar) {
		if (numeroArredondar == null || numeroArredondar.isNaN() || numeroArredondar.isInfinite()) {
			return 0l;
		}
		BigDecimal bd = new BigDecimal(numeroArredondar);
		bd = bd.setScale(0, RoundingMode.HALF_UP);
		return bd.longValueExact();
	}

	/**
	 * arredonda um numero de ponto flutuante para somente duas casas após a
	 * virgula. se fração restante for >= 0.5 arredonda pra 1, senão arredonda
	 * pra 0.
	 * 
	 * @param numeroArredondar
	 * @return float com duas casas após a virgula
	 * @see RoundingMode#HALF_UP
	 */
	public static Float arredondaDuasCasas(String numeroArredondar) {
		if (numeroArredondar == null || numeroArredondar.equals("")) {
			return 0f;
		}
		BigDecimal bd = new BigDecimal(numeroArredondar);
		bd = bd.setScale(2, RoundingMode.HALF_UP);
		return bd.floatValue();
	}

	/**
	 * retorna o valor positivo do numero passado por parametro. se o numero for
	 * negativo, é retornado seu valor positivo, caso contrario retorna ele
	 * mesmo.
	 * 
	 * @param valor
	 * @return
	 */
	public static Float getValorPositivo(Float valor) {
		if (valor != null && valor.floatValue() < 0) {
			return -valor;
		}
		return valor;
	}

	/**
	 * método para arredondar valores Float para Inteiro.<br>
	 * Exemplos: <br>
	 * 0,95 -> 1<br>
	 * 1,25 -> 1 <br>
	 * 1,5 -> 2
	 * 
	 * @param numeroArredondar
	 * @return
	 */
	public static Integer arredondaInteiro(Float numeroArredondar) {
		if (numeroArredondar == null || numeroArredondar.isNaN() || numeroArredondar.isInfinite()) {
			return 0;
		}
		BigDecimal bd = new BigDecimal(numeroArredondar);
		bd = bd.setScale(0, RoundingMode.HALF_UP);
		return bd.intValue();
	}
}
